{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1517f922710>]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,6*np.pi)\n",
    "plt.plot(x,np.sin(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                                                *                                                                                                                                 \n",
      "                                                                                                                               * *                                                                                                                                \n",
      "                                                                                                                              * * *                                                                                                                               \n",
      "                                                                                                                            * ** ** *                                                                                                                             \n",
      "                                                                                                                          * ** *** ** *                                                                                                                           \n",
      "                                                                                                                     * *** ***** ***** *** *                                                                                                                      \n",
      "                                                                                                             * *** ******** ********** ******** *** *                                                                                                             \n",
      "                                                                                           * **** *********** ****************** ****************** *********** **** *                                                                                            \n",
      "                                                            * **** ************** **************************** *********************************** **************************** ************** **** *                                                             \n",
      "* ***** ****************** ****************************************** *************************************************************** *************************************************************** ****************************************** ****************** ***** *\n"
     ]
    }
   ],
   "source": [
    "def generate_pascals_triangle(n):\n",
    "    triangle = []\n",
    "    for i in range(n):\n",
    "        row = [1] * (i + 1)\n",
    "        for j in range(1, i):\n",
    "            row[j] = triangle[i-1][j-1] + triangle[i-1][j]\n",
    "        triangle.append(row)\n",
    "    return triangle\n",
    " \n",
    "def draw_pascals_triangle(triangle, max_value_per_star=2):\n",
    "    # 确定三角形中的最大值，用于缩放星号数量\n",
    "    max_value = max(max(row) for row in triangle)\n",
    "    \n",
    "    # 根据元素值确定星号数量的函数\n",
    "    def num_stars(value):\n",
    "        return (value // max_value_per_star) + (1 if value % max_value_per_star != 0 else 0)\n",
    "    \n",
    "    # 计算每行需要的最大宽度（包括空格）\n",
    "    max_width = max(len(''.join(['*' * num_stars(num) for num in row])) for row in triangle)\n",
    "    \n",
    "    for row in triangle:\n",
    "        # 生成星号字符串列表\n",
    "        stars = ['*' * num_stars(num) for num in row]\n",
    "        # 将星号列表转换为字符串，并用空格填充到最大宽度\n",
    "        formatted_row = ' '.join(stars).center(max_width)\n",
    "        # 打印当前行\n",
    "        print(formatted_row)\n",
    " \n",
    "# 设置要生成的杨辉三角形的行数\n",
    "n = 10\n",
    "triangle = generate_pascals_triangle(n)\n",
    "draw_pascals_triangle(triangle)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      *\n",
      "     ***\n",
      "    *****\n",
      "   *******\n",
      "  *********\n",
      " ***********\n",
      "*************\n",
      "  **\n",
      "  **\n"
     ]
    }
   ],
   "source": [
    "def print_tree(height):\n",
    "    # 绘制树冠部分\n",
    "    for i in range(height):\n",
    "        # 每一行先打印空格，使星号居中\n",
    "        print(' ' * (height - i - 1) + '*' * (2 * i + 1))\n",
    "    \n",
    "    # 绘制树干部分\n",
    "    trunk_width = height // 3\n",
    "    trunk_height = height // 3\n",
    "    trunk_space = (height - trunk_width) // 2\n",
    "    \n",
    "    for i in range(trunk_height):\n",
    "        print(' ' * trunk_space + '*' * trunk_width)\n",
    "\n",
    "# 调用函数并设置树的高度\n",
    "print_tree(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: B\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "     if score >= 90:\n",
    "         return 'A'\n",
    "     elif score >= 80:\n",
    "         return 'B'\n",
    "     elif score >= 70:\n",
    "         return 'C'\n",
    "     elif score >= 60:\n",
    "         return 'D'\n",
    "     else:\n",
    "         return 'F'\n",
    "\n",
    "def main():\n",
    "    try:\n",
    "         score = float(input(\"请输入成绩（0-100）: \"))\n",
    "         if not 0 <= score <= 100:\n",
    "             print(\"成绩必须在0到100之间。\")\n",
    "         else:\n",
    "            grade = determine_grade(score)\n",
    "            print(f\"你的等级是: {grade}\")\n",
    "    except ValueError:\n",
    "        print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"436pt\" height=\"676pt\"\n",
       " viewBox=\"0.00 0.00 436.02 675.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 671.5)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-671.5 432.02,-671.5 432.02,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"331.01,-667.5 277.01,-667.5 277.01,-631.5 331.01,-631.5 331.01,-667.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-643.33\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"420.58,-594.5 235.15,-594.5 187.45,-558.5 372.87,-558.5 420.58,-594.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-571.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">请输入成绩=?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-631.31C304.01,-623.73 304.01,-614.6 304.01,-606.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-606.04 304.01,-596.04 300.51,-606.04 307.51,-606.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"304.01,-521.5 180,-503.5 304.01,-485.5 428.02,-503.5 304.01,-521.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-498.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于90?</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-558.31C304.01,-550.73 304.01,-541.6 304.01,-533.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-533.04 304.01,-523.04 300.51,-533.04 307.51,-533.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"228.01,-433 104,-415 228.01,-397 352.02,-415 228.01,-433\"/>\n",
       "<text text-anchor=\"middle\" x=\"228.01\" y=\"-409.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于80?</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M290.42,-487.04C278.86,-473.87 262.07,-454.76 248.81,-439.67\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"251.71,-437.67 242.48,-432.47 246.45,-442.29 251.71,-437.67\"/>\n",
       "<text text-anchor=\"middle\" x=\"281.07\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- a -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>a</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"407.51,-379 352.51,-379 352.51,-343 407.51,-343 407.51,-379\"/>\n",
       "<text text-anchor=\"middle\" x=\"380.01\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print A</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;a -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>3&#45;&gt;a</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M319.74,-487.33C332.59,-474.11 350.32,-453.82 361.01,-433 367.82,-419.74 372.37,-403.8 375.3,-390.39\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"378.68,-391.36 377.19,-380.87 371.81,-390 378.68,-391.36\"/>\n",
       "<text text-anchor=\"middle\" x=\"359.23\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"175.01,-325 51,-307 175.01,-289 299.02,-307 175.01,-325\"/>\n",
       "<text text-anchor=\"middle\" x=\"175.01\" y=\"-301.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于70?</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M219.96,-397.9C211.56,-381.09 198.24,-354.45 188.27,-334.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"191.42,-332.98 183.81,-325.6 185.16,-336.11 191.42,-332.98\"/>\n",
       "<text text-anchor=\"middle\" x=\"217.61\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- b -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>b</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"356.51,-271 301.51,-271 301.51,-235 356.51,-235 356.51,-271\"/>\n",
       "<text text-anchor=\"middle\" x=\"329.01\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print B</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;b -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4&#45;&gt;b</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M245.14,-399.3C263.23,-382.9 291.38,-354.74 308.01,-325 315.34,-311.9 320.35,-295.97 323.64,-282.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"327.01,-283.48 325.76,-272.96 320.18,-281.96 327.01,-283.48\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.53\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"124.01,-217 0,-199 124.01,-181 248.02,-199 124.01,-217\"/>\n",
       "<text text-anchor=\"middle\" x=\"124.01\" y=\"-193.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于60?</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.27,-289.9C159.18,-273.09 146.36,-246.45 136.77,-226.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"139.98,-225.11 132.49,-217.61 133.67,-228.14 139.98,-225.11\"/>\n",
       "<text text-anchor=\"middle\" x=\"165.31\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- c -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>c</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.51,-163 248.51,-163 248.51,-127 303.51,-127 303.51,-163\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print C</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;c -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>5&#45;&gt;c</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193.08,-291.18C211.77,-274.88 240.5,-247 257.01,-217 264.24,-203.86 268.84,-187.81 271.7,-174.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"275.09,-175.18 273.5,-164.71 268.21,-173.89 275.09,-175.18\"/>\n",
       "<text text-anchor=\"middle\" x=\"254.43\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- d -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>d</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"166.89,-109 111.14,-109 111.14,-73 166.89,-73 166.89,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"139.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print D</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;d -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>6&#45;&gt;d</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M126.42,-180.97C128.73,-164.69 132.24,-139.82 134.98,-120.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"138.41,-121.23 136.35,-110.84 131.48,-120.25 138.41,-121.23\"/>\n",
       "<text text-anchor=\"middle\" x=\"143.86\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- e -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>e</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"245.14,-109 190.89,-109 190.89,-73 245.14,-73 245.14,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"218.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print E</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;e -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>6&#45;&gt;e</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M139.14,-182.89C145.12,-176.8 151.98,-169.65 158.01,-163 171.22,-148.43 185.45,-131.64 196.74,-118.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"199.4,-120.32 203.07,-110.38 194,-115.86 199.4,-120.32\"/>\n",
       "<text text-anchor=\"middle\" x=\"196.26\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.01,-36 249.01,-36 249.01,0 303.01,0 303.01,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- a&#45;&gt;7 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>a&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M378.7,-342.75C377.22,-321.79 375.01,-285.32 375.01,-254 375.01,-254 375.01,-254 375.01,-90 375.01,-58.72 341.98,-39.89 314.08,-29.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"315.35,-26.3 304.76,-26.38 313.09,-32.92 315.35,-26.3\"/>\n",
       "</g>\n",
       "<!-- b&#45;&gt;7 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>b&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M327.05,-234.9C324.14,-210.72 318.12,-165.22 310.01,-127 303.03,-94.09 300.72,-85.89 290.01,-54 289.25,-51.72 288.41,-49.38 287.55,-47.03\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"290.81,-45.77 283.93,-37.71 284.29,-48.3 290.81,-45.77\"/>\n",
       "</g>\n",
       "<!-- c&#45;&gt;7 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>c&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M276.01,-126.62C276.01,-106.19 276.01,-71.99 276.01,-47.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"279.51,-47.75 276.01,-37.75 272.51,-47.75 279.51,-47.75\"/>\n",
       "</g>\n",
       "<!-- d&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>d&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.07,-75.46C187.84,-64.7 216.34,-49.92 238.99,-38.19\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"240.32,-41.44 247.58,-33.73 237.1,-35.23 240.32,-41.44\"/>\n",
       "</g>\n",
       "<!-- e&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>e&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M232.05,-72.81C238.89,-64.44 247.26,-54.2 254.85,-44.9\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"257.53,-47.16 261.14,-37.2 252.11,-42.73 257.53,-47.16\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x15178878830>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape':'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','请输入成绩=?', shape='parallelogram')\n",
    "dot.node('3','x是否大等于90?', shape='diamond')\n",
    "dot.node('4','x是否大等于80?', shape='diamond')\n",
    "dot.node('5','x是否大等于70?', shape='diamond')\n",
    "dot.node('6','x是否大等于60?', shape='diamond')\n",
    "dot.node('a','Print A')\n",
    "dot.node('b','Print B')\n",
    "dot.node('c','Print C')\n",
    "dot.node('d','Print D')\n",
    "dot.node('e','Print E')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','a7','b7','c7','d7','e7'])\n",
    "dot.edge('3','a',label='Yes')\n",
    "dot.edge('3','4',label='No')\n",
    "dot.edge('4','b',label='Yes')\n",
    "dot.edge('4','5',label='No')\n",
    "dot.edge('5','c',label='Yes')\n",
    "dot.edge('5','6',label='No')\n",
    "dot.edge('6','d',label='Yes')\n",
    "dot.edge('6','e',label='No')\n",
    "dot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy             2.1.3\n",
      "matplotlib        3.9.2\n",
      "matplotlib-inline 0.1.7\n"
     ]
    }
   ],
   "source": [
    "for item in a:\n",
    "    if 'numpy' in item:\n",
    "        print(item)\n",
    "       \n",
    "for item in a:\n",
    "    if 'matplotlib' in item:\n",
    "        print(item)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x174f7d46170>,\n",
       " <matplotlib.lines.Line2D at 0x174f7d461d0>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,6*np.pi)\n",
    "plt.plot(x,np.sin(x),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 7.0.1 (20221109.1506)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"208pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 208.12 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 204.12,-472 204.12,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-468 73.06,-468 73.06,-432 127.06,-432 127.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-446.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"200.18,-396 40.91,-396 -0.06,-360 159.21,-360 200.18,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-374.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-431.7C100.06,-424.41 100.06,-415.73 100.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-407.62 100.06,-397.62 96.56,-407.62 103.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"143.06,-324 57.06,-324 57.06,-288 143.06,-288 143.06,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-302.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-359.7C100.06,-352.41 100.06,-343.73 100.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-335.62 100.06,-325.62 96.56,-335.62 103.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"152.56,-252 47.56,-252 47.56,-216 152.56,-216 152.56,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-230.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-287.7C100.06,-280.41 100.06,-271.73 100.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-263.62 100.06,-253.62 96.56,-263.62 103.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"165.56,-180 34.56,-180 34.56,-144 165.56,-144 165.56,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-158.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-215.7C100.06,-208.41 100.06,-199.73 100.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-191.62 100.06,-181.62 96.56,-191.62 103.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-108 73.06,-108 73.06,-72 127.06,-72 127.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-143.7C100.06,-136.41 100.06,-127.73 100.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-119.62 100.06,-109.62 96.56,-119.62 103.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-36 73.06,-36 73.06,0 127.06,0 127.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-71.7C100.06,-64.41 100.06,-55.73 100.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-47.62 100.06,-37.62 96.56,-47.62 103.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x20baea4e410>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//111.jpg\" width=\"150 \" alt=\"jerry\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                               MM                                             \n",
      "                                                        W   rrrrrrrf                                          \n",
      "                  .frrrrrrrrrrrrfM                   WrW  &rrrrrrrrrrM                                        \n",
      "                 MrM)))))))))]/rrrrrr]           .drjrrrrrrjjjjrr$M8tr&                                       \n",
      "                X())))))))))))))1frrrrr\\     8jrrrr$rfjrjrfxBMMzrrrrrrr                                       \n",
      "                M))))))))))))))))))%rrrrrrrrrrrrrrrrrMrrrUrrrrrrrrrrrrr#                                      \n",
      "                W))))))))))))))))))))rrrrrrrrrrr%jrrrrWrrrrrrrrrrrrrrrrrrr8&  Q                               \n",
      "                B)))))))))))))))))))))rrrrrrrrrrrrrrrrrrjjrrrrrrrrrrrrrrrrxrrW                                \n",
      "                 @))))))))))))))))))))qrrrrrrrrrrrrrrM^^^^^^WjrrrrrrrrrrW.Crrrr-                              \n",
      "                  {))))))))))))))))))Wrrrrrrrrrrrrrrrr^^^^^^^^8rrrrrrrh.....@rrr                              \n",
      "                   ())))))))))Wrrro&jrrrrrrrrrrrrrrrrrr^^^^^^^^jrrrrrrW..... rrrW                             \n",
      "                    8)))))))))))))%BrrrrrrrrrrrrrrrrrrrjW^^^'W^Mrrrrrrr..+.. rrc                              \n",
      "                      M)))))))))))))OrrrrrrrrrrrrrrrrrrrrM^^&&&qrrrrrrrM##&.$rj                               \n",
      "                        M)))))))))))%rrrrrrrrrrrrrrrrrrrMr\\\"f&&$rrrrrrrr## ./rrO   M                          \n",
      "                           M1)))))))Wrrrrrrrrrrrrrrrrrrr/M*%IIIIIIIMMMMM#IIIIarrrr/                           \n",
      "                               &)))))MrrrrrrrrrrrCrrrrrrrrr$!IIIIIIII$*BlIIII\\rrrrrj                          \n",
      "                                     . 8rrrrrrrrjIIIIIIM&&&&MIIIII,MM{$@$~OrrrrrrrO                           \n",
      "                                          @jrrrrrr,IIIIkqqqqp&&&&&&XIIIIIlrrrrjM                              \n",
      "                                            MrrrrrxM%IIIIqqqqqq&WIIIIIIIMd                                    \n",
      "                                        |jrrrrrrrrrrrrMWlIII\"W$IIl#rrrrrr                                     \n",
      "                                     WrrrrrrrrrrrrrrrrMrrrr&vI\"Mrrrrrrrrrrru                                  \n",
      "                                  Mrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr$                                \n",
      "                               $rrrrrrrrrrrrrrrrrrrrrrrrrBIIWrrrrj\"IIWrrrrrrrrrM                              \n",
      "                             %rrrrrrrrrrrrrrrrrrrrrrrrr?IIIIIMr&IIIII.rrrrrrrrrrrM                            \n",
      "                           rrrrrrrrrrrrrrrrrrrrrrrrrrWIIIIIIIIIIIIIIIIjrrrrrrrrrrrr\\                          \n",
      "                        Wurrrrrrrrrrrr@!   orrrrrrrxlIIIIIIIIIIIIIIIIIWrrrrrrrrrrrrrrr                        \n",
      "              $MM%rrrrrrrrrrrrrrrrZ      %rrrrrrrrWIIIIIIIIIIIIIIIIIII%    Mrrrrrrrrrrrr$                     \n",
      "            WjrrrrrrrrrrrrrrrrrM      Mrrrrrrrrr8IIIIIIIIIIIIIIIIIIIII         Qxrrrrrrrrrrr/#8#W$            \n",
      "              %rrrrrrrrr&WrrrrrjM Mrrrrrrrrrrr\\;IIIIIIIIIIIIIIIIIIIII.            jrrrrrrrrrrrrrrrrr@         \n",
      "               .            _rrrr#rrrrrrrrrrrIIIIIIIIIIIIIIIIIIIIIIII&            /rrrrrrrrrrrrrrrrrx         \n",
      "        $#8X\\/UWB             #rrrrrrrrrrrr'IIIIIIIIIIIIIIIIIIIIIIIIM            0rrrrW            .          \n",
      " @             M(jjjjjjjj(@%MMrrrrrrrrrrrrIIIIIIIIIIIIIIIIIIIIIIIIIW                                          \n",
      "                     #/fjjjjjBrrrrrrrrrrrMIIIIIIIIIIIIIIIIIIIIIIIW                                            \n",
      "                            rrrrrrrrrrrrrrYIIIIIIIIIIIIIIIIIII!rrw                                            \n",
      "                            LrrrrrrrrrrrrrrxMIIIIIIIIIIIII;Mrrrrrr                                            \n",
      "                           8rrrrrrrrrrrrrrrrrrrrjrtc\\rjrrrrrrrrrrr8                                           \n",
      "                           rrrrrrrrrrrrrrrjt%    MrrrrrrrrrrrrrrrrrM                                          \n",
      "                         ;rrrrrrrrrrrrr@             WrrrrrrrrrrrrrrM                                         \n",
      "                       $8rrrrrrrrrr/\"                   &jrrrrrrrrrrr#                                        \n",
      "               #rrrrrrrrrrrrrrrrM                         .rrrrrrrrrrrxrrW                                    \n",
      "           &rrrrrrrrrrrrrrrrrrrU                            rrrrrrrrrrrrrrrrrj%                               \n",
      "          WrrMrrrrrrrrrrrrrx#                                 Mfjrrrrrrrrrrr%rrjX                             \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\15487\\AppData\\Local\\Temp\\ipykernel_36636\\1751239047.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\".\\\\111.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
